<!DOCTYPE html>
            
<HTML>
<HEAD>
<meta name="booktitle" content="Developing Applications With Objective Caml" >
 <meta charset="ISO-8859-1"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<META name="GENERATOR" content="hevea 1.05-7 of 2000-02-24">
<META NAME="Author" CONTENT="Christian.Queinnec@lip6.fr">
<LINK rel=stylesheet type="text/css" href="videoc-ocda.css">
<script language="JavaScript" src="videoc.js"><!--
//--></script>
<TITLE>
 Exercises
</TITLE>
</HEAD>
<BODY class="regularBody">
<A HREF="book-ora077.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora079.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
<HR>

<H2> Exercises</H2>
<A NAME="toc110"></A>
<H3> Resolution of Linear Systems</H3>This exercise revisits the resolution of linear systems
presented as an exercise in the chapter on imperative programming
(<A HREF="index.html#chap-PI">3</A>).
<OL type=1>
<LI>
 By using the <TT>Printf</TT> module, write a function
<TT><A id="a188__1_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('1_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 1,APPEND/Bibliothequescor.ml.tex,print-system -->print_system</SPAN></A></TT>  
that aligns the columns of the system.
<!-- POPUP DEFINITION -->
<layer id="l__1_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","1_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>type</B><CODE> </CODE>vect<CODE> </CODE><CODE>=</CODE><CODE> </CODE>float<CODE> </CODE>array<CODE> </CODE><BR><CODE> </CODE><B>type</B><CODE> </CODE>mat<CODE> </CODE><CODE>=</CODE><CODE> </CODE>vect<CODE> </CODE>array<CODE> </CODE><BR><CODE> </CODE><B>type</B><CODE> </CODE>syst<CODE> </CODE><CODE>=</CODE><CODE> </CODE>{<CODE> </CODE>m<CODE>:</CODE>mat<CODE> </CODE>;<CODE> </CODE>v<CODE>:</CODE>vect<CODE> </CODE>}<CODE> </CODE>;;<BR><CODE>type vect = float array</CODE><BR><CODE>type mat = vect array</CODE><BR><CODE>type syst = { m: mat; v: vect }</CODE><BR><BR># <B>let</B><CODE> </CODE>affiche_systeme<CODE> </CODE>s<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>w<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.length<CODE> </CODE>s<CODE>.</CODE>m<CODE>.</CODE><TT>(</TT><CODE>0</CODE><TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>and</B><CODE> </CODE>h<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.length<CODE> </CODE>s<CODE>.</CODE>m<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><CODE> </CODE>c<CODE> </CODE><CODE>=</CODE><CODE> </CODE>h<CODE> </CODE><CODE>/</CODE><CODE> </CODE><CODE>2</CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE>h<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"| "</CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>j<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE>w<CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>" %8.2f "</CODE><CODE> </CODE>s<CODE>.</CODE>m<CODE>.</CODE><TT>(</TT>i<TT>)</TT><CODE>.</CODE><TT>(</TT>j<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>" |"</CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE>c<CODE> </CODE><B>then</B><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>" * "</CODE><CODE> </CODE><B>else</B><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"   "</CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"| x_%-2d |"</CODE><CODE> </CODE>i;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE>c<CODE> </CODE><B>then</B><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>" = "</CODE><CODE> </CODE><B>else</B><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"   "</CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"| %8.2f |\n"</CODE><CODE> </CODE>s<CODE>.</CODE>v<CODE>.</CODE><TT>(</TT>i<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"\n"</CODE><CODE> </CODE>;;<BR><CODE>val affiche_systeme : syst -&gt; unit = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("1_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> <A id="a189__2_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('2_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 2,APPEND/Bibliothequescor.ml.tex,system-tester -->Test</SPAN></A>  
this function on the examples given on page <A HREF="book-ora031.html#ex-systemes">??</A>.
<!-- POPUP DEFINITION -->
<layer id="l__2_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","2_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>ax3<CODE> </CODE><CODE>=</CODE><CODE> </CODE>{<CODE> </CODE>m<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>[|</CODE><CODE> </CODE><CODE>[|</CODE><CODE> </CODE><CODE>1</CODE><CODE>0</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>7</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>8</CODE><CODE>.</CODE><CODE>1</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>7</CODE><CODE>.</CODE><CODE>2</CODE><CODE> </CODE><CODE> </CODE><CODE>|]</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE>[|</CODE><CODE> </CODE><CODE> </CODE><CODE>7</CODE><CODE>.</CODE><CODE>0</CODE><CODE>8</CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>5</CODE><CODE>.</CODE><CODE>0</CODE><CODE>4</CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>6</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>5</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE><CODE>|]</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE>[|</CODE><CODE> </CODE><CODE> </CODE><CODE>8</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>5</CODE><CODE>.</CODE><CODE>9</CODE><CODE>8</CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>9</CODE><CODE>.</CODE><CODE>8</CODE><CODE>9</CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>9</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE><CODE>|]</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE>[|</CODE><CODE> </CODE><CODE> </CODE><CODE>6</CODE><CODE>.</CODE><CODE>9</CODE><CODE>9</CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>4</CODE><CODE>.</CODE><CODE>9</CODE><CODE>9</CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>9</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE> </CODE><CODE>9</CODE><CODE>.</CODE><CODE>9</CODE><CODE>8</CODE><CODE> </CODE><CODE>|]</CODE><CODE> </CODE><CODE>|]</CODE><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>v<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>[|</CODE><CODE> </CODE><CODE>3</CODE><CODE>2</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE>2</CODE><CODE>3</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE> </CODE>;<CODE> </CODE><CODE>3</CODE><CODE>3</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE>;<CODE> </CODE><CODE>3</CODE><CODE>1</CODE><CODE>.</CODE><CODE>0</CODE><CODE> </CODE><CODE>|]</CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>}<CODE> </CODE>;;<BR><CODE>val ax3 : syst =</CODE><BR><CODE>  {m=</CODE><BR><CODE>    [|[|10; 7; 8.1; 7.2|]; [|7.08; 5.04; 6; 5|]; [|8; 5.98; 9.89; ...|];</CODE><BR><CODE>      ...|];</CODE><BR><CODE>   v=...}</CODE><BR># affiche_systeme<CODE> </CODE>ax3<CODE> </CODE>;;<BR><CODE>|     10.00      7.00      8.10      7.20  |   | x_0  |   |    32.00 |</CODE><BR><CODE>|      7.08      5.04      6.00      5.00  |   | x_1  |   |    23.00 |</CODE><BR><CODE>|      8.00      5.98      9.89      9.00  | * | x_2  | = |    33.00 |</CODE><BR><CODE>|      6.99      4.99      9.00      9.98  |   | x_3  |   |    31.00 |</CODE><BR><BR><CODE>- : unit = ()</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("2_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script></OL><A NAME="toc111"></A>
<H3> Search for Prime Numbers</H3>
<A NAME="exo-eratosthene"></A>
The Sieve of Eratosthenes is an easily programmed algorithm
 that searches for prime numbers in a range of integers, given
that the lower limit is a prime number. The method is:
<OL type=1>
<LI>
 Enumerate, in a list, all the values on the range.

<LI> Remove from the list all the values that are multiples of the first
element.

<LI> Remove this first element from the list, and keep it as a prime.

<LI> Restart at step 2 as long as the list is not empty.
</OL>Here are the steps to create a program that implements this algorithm:
<OL type=1>
<LI>
 Write a function <TT><A id="a190__3_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('3_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 3,APPEND/Bibliothequescor.ml.tex,era-range -->range</SPAN></A></TT>  
that builds a range of integers represented in the form of a list.
<!-- POPUP DEFINITION -->
<layer id="l__3_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","3_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 On reprend la fonction <TT>interval</TT> des exercices du chapitre pr�c�dent.


<PRE><BR># <B>let</B><CODE> </CODE>interval<CODE> </CODE>order<CODE> </CODE>next<CODE> </CODE>a<CODE> </CODE>b<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>aux<CODE> </CODE>a<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>not<CODE> </CODE><TT>(</TT>order<CODE> </CODE>a<CODE> </CODE>b<TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE><CODE>[</CODE>a<CODE>]</CODE><CODE> </CODE><B>else</B><CODE> </CODE><CODE> </CODE>a<CODE> </CODE>::<CODE> </CODE>aux<CODE> </CODE><CODE> </CODE><TT>(</TT>next<CODE> </CODE>a<TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE>aux<CODE> </CODE>a<CODE> </CODE>;;<BR><CODE>val interval : ('a -&gt; 'b -&gt; bool) -&gt; ('a -&gt; 'a) -&gt; 'a -&gt; 'b -&gt; 'a list =</CODE><BR><CODE>  &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("3_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Write a function <TT><A id="a191__4_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('4_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 4,APPEND/Bibliothequescor.ml.tex,eras -->eras</SPAN></A></TT>  
that calculates the prime numbers on a range of integers starting with 2,
according to the algorithm of the Sieve of Eratosthenes.
<!-- POPUP DEFINITION -->
<layer id="l__4_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","4_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE><B>rec</B><CODE> </CODE>eras<CODE> </CODE>l<CODE> </CODE><CODE> </CODE><CODE>=</CODE><CODE> </CODE><B>match</B><CODE> </CODE>l<CODE> </CODE><B>with</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>[]<CODE> </CODE>-&gt;<CODE> </CODE>[]<BR><CODE> </CODE><CODE>|</CODE><CODE> </CODE>p::q<CODE> </CODE>-&gt;<CODE> </CODE>p<CODE> </CODE>::<CODE> </CODE><TT>(</TT>eras<CODE> </CODE><TT>(</TT>List.filter<CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><B>mod</B><CODE> </CODE>p<CODE> </CODE><CODE>&lt;&gt;</CODE><CODE> </CODE><CODE>0</CODE><TT>)</TT><CODE> </CODE>q<TT>)</TT><TT>)</TT><CODE> </CODE>;;<BR><CODE>val eras : int list -&gt; int list = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("4_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>
Write a function <TT><A id="a192__5_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('5_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 5,APPEND/Bibliothequescor.ml.tex,era-go -->era_go</SPAN></A></TT>  
that takes an integer and returns a list of all the prime numbers
smaller than this integer.
<!-- POPUP DEFINITION -->
<layer id="l__5_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","5_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>era_go<CODE> </CODE>n<CODE> </CODE><CODE>=</CODE><CODE> </CODE>eras<CODE> </CODE><TT>(</TT>interval<CODE> </CODE><TT>(</TT><CODE>&lt;</CODE><TT>)</TT><CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>x<CODE> </CODE><CODE>+</CODE><CODE> </CODE><CODE>1</CODE><TT>)</TT><CODE> </CODE><CODE>2</CODE><CODE> </CODE>n<TT>)</TT><CODE> </CODE>;;<BR><CODE>val era_go : int -&gt; int list = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("5_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> We want to write an executable <TT><A id="a193__6_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('6_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 6,APPEND/Bibliothequescor.ml.tex,era-com -->primes</SPAN></A></TT>  
that one will launch by typing the command <TT>primes n</TT>, where <TT>n</TT>
is an integer. This executable will print the prime numbers smaller
than <TT>n</TT>. For this we must use the <TT>Sys</TT> module
and check whether a parameter was passed.
<!-- POPUP DEFINITION -->
<layer id="l__6_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","6_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 Fichier principal <TT>premiers.ml</TT> :


<PRE><BR># <B>let</B><CODE> </CODE>usage<CODE> </CODE>()<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"Usage: premiers n\n"</CODE>;;<BR><CODE>val usage : unit -&gt; unit = &lt;fun&gt;</CODE><BR><BR># <B>let</B><CODE> </CODE>main<CODE> </CODE>()<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>Array.length<CODE> </CODE><TT>(</TT>Sys.argv<TT>)</TT><CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE><CODE>2</CODE><CODE> </CODE><B>then</B><CODE> </CODE>usage()<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>n<CODE> </CODE><CODE>=</CODE><CODE> </CODE>int_of_string<CODE> </CODE>Sys.argv<CODE>.</CODE><TT>(</TT><CODE>1</CODE><TT>)</TT><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>n<CODE> </CODE><CODE>&lt;</CODE><CODE> </CODE><CODE>2</CODE><CODE> </CODE><B>then</B><CODE> </CODE>usage()<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>r<CODE> </CODE><CODE>=</CODE><CODE> </CODE>era_go<CODE> </CODE>n<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>List.iter<CODE> </CODE><TT>(</TT><B>fun</B><CODE> </CODE>x<CODE> </CODE>-&gt;<CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"%d "</CODE><CODE> </CODE>x<TT>)</TT><CODE> </CODE>r;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>Printf.printf<CODE> </CODE><CODE>"\n"</CODE><CODE> </CODE>;;<BR><CODE>val main : unit -&gt; unit = &lt;fun&gt;</CODE><BR>

</PRE>



<PRE><BR>main()<CODE> </CODE>;;<BR>

</PRE>
<BR>
<BR>
Construction de l'ex�cutable : 
<PRE>
$ ocamlc -o premiers premiers.ml
</PRE>ou
<PRE>
$ ocamlopt -o premiers premiers.ml
</PRE>Test de l'ex�cutable : 
<PRE>
$ premiers 
Usage: premiers n
$ premiers 50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 
$ premiers 100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
</PRE></span><script language="JavaScript"><!--
  closePopUp("6_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script></OL><A NAME="toc112"></A>
<H3> Displaying Bitmaps</H3>
Bitmaps saved as <I>color array array</I> are 
bulky. Since 24 bits of color are rarely used, it is possible to
encode a bitmap in less space. For this we will analyze
the number of colors in a bitmap. If the number is small
(for example less than 256) we can encode each pixel in 1 byte,
representing the number of the color in the table of colors of this
bitmap.<BR>
<BR>
<OL type=1>
<LI>
 Write a function <TT><A id="a194__7_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('7_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 7,APPEND/Bibliothequescor.ml.tex,analyze-colors -->analyze_colors</SPAN></A></TT>  
exploring a value of type <I>color array array</I> and that
returns a list of all the colors found in this image.
<!-- POPUP DEFINITION -->
<layer id="l__7_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","7_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>analyse_couleurs<CODE> </CODE>c<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>l<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ref<CODE> </CODE>[]<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE><TT>(</TT>Array.length<CODE> </CODE>c<TT>)</TT><CODE> </CODE><CODE>-</CODE><CODE> </CODE><CODE>1</CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>j<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE><TT>(</TT>Array.length<CODE> </CODE>c<CODE>.</CODE><TT>(</TT><CODE>0</CODE><TT>)</TT><TT>)</TT><CODE> </CODE><CODE>-</CODE><CODE>1</CODE><CODE> </CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>not<TT>(</TT>List.mem<CODE> </CODE>c<CODE>.</CODE><TT>(</TT>i<TT>)</TT><CODE>.</CODE><TT>(</TT>j<TT>)</TT><CODE> </CODE><CODE>!</CODE>l<TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE>l<CODE>:=</CODE><CODE> </CODE>c<CODE>.</CODE><TT>(</TT>i<TT>)</TT><CODE>.</CODE><TT>(</TT>j<TT>)</TT><CODE> </CODE>::<CODE> </CODE><CODE>!</CODE>l<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>List.rev<CODE> </CODE><CODE>!</CODE>l<CODE> </CODE>;;<BR><CODE>val analyse_couleurs : 'a array array -&gt; 'a list = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("7_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> From this list, construct
a palette. We will take a vector of colors.
The index in the table will correspond to the order of the color,
and the contents are the color itself. Write the function
<TT><A id="a195__8_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('8_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 8,APPEND/Bibliothequescor.ml.tex,find-index -->find_index</SPAN></A></TT>  
that returns the index of a value stored in the array.
<!-- POPUP DEFINITION -->
<layer id="l__8_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","8_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>construire_table<CODE> </CODE>l<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.of_list<CODE> </CODE>l<CODE> </CODE>;;<BR><CODE>val construire_table : 'a list -&gt; 'a array = &lt;fun&gt;</CODE><BR><BR># <B>exception</B><CODE> </CODE>Find<CODE> </CODE><B>of</B><CODE> </CODE>int;;<BR><CODE>exception Find of int</CODE><BR><BR># <B>let</B><CODE> </CODE>trouve_indice<CODE> </CODE>c<CODE> </CODE>t<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>aux<CODE> </CODE>()<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>i<CODE>=</CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE>Array.length<CODE> </CODE>t<CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>c<CODE> </CODE><CODE>=</CODE><CODE> </CODE>t<CODE>.</CODE><TT>(</TT>i<TT>)</TT><CODE> </CODE><B>then</B><CODE> </CODE>raise<CODE> </CODE><TT>(</TT>Find<CODE> </CODE>i<TT>)</TT><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>raise<CODE> </CODE>Not_found<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>try</B><CODE> </CODE>aux<CODE> </CODE>()<CODE> </CODE><B>with</B><CODE> </CODE>Find<CODE> </CODE>i<CODE> </CODE>-&gt;<CODE> </CODE>i<CODE> </CODE>;;<BR><CODE>val trouve_indice : 'a -&gt; 'a array -&gt; int = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("8_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> From this table, write a conversion function,
<TT><A id="a196__9_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('9_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 9,APPEND/Bibliothequescor.ml.tex,coding -->encode</SPAN></A></TT>,  
that goes from a
<I>color array array</I> to a <I>string</I>. Each pixel is
thus represented by a character.
<!-- POPUP DEFINITION -->
<layer id="l__9_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","9_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>encode<CODE> </CODE>caa<CODE> </CODE>t<CODE> </CODE><CODE>=</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>if</B><CODE> </CODE>Array.length<CODE> </CODE>t<CODE> </CODE><CODE>&gt;</CODE><CODE> </CODE><CODE>2</CODE><CODE>5</CODE><CODE>5</CODE><CODE> </CODE><B>then</B><CODE> </CODE>failwith<CODE> </CODE><CODE>"trop de couleurs (&gt; 255)"</CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>else</B><CODE> </CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>h<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.length<CODE> </CODE>caa<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>and</B><CODE> </CODE>w<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.length<CODE> </CODE>caa<CODE>.</CODE><TT>(</TT><CODE>0</CODE><TT>)</TT><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>s<CODE> </CODE><CODE>=</CODE><CODE> </CODE>String.create<CODE> </CODE><TT>(</TT>h<CODE> </CODE><CODE>*</CODE><CODE> </CODE>w<TT>)</TT><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>ns<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ref<CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE>h<CODE>-</CODE><CODE>1</CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>j<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE>w<CODE>-</CODE><CODE>1</CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>ci<CODE> </CODE><CODE>=</CODE><CODE> </CODE>trouve_indice<CODE> </CODE>caa<CODE>.</CODE><TT>(</TT>i<TT>)</TT><CODE>.</CODE><TT>(</TT>j<TT>)</TT><CODE> </CODE>t<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>s<CODE>.[!</CODE>ns<CODE>]</CODE><CODE> </CODE><CODE>&lt;-</CODE><CODE> </CODE>char_of_int<CODE> </CODE>ci<CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>incr<CODE> </CODE>ns<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>s<CODE> </CODE>;;<BR><CODE>val encode : 'a array array -&gt; 'a array -&gt; string = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("9_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Define a type <TT><A id="a197__10_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('10_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 10,APPEND/Bibliothequescor.ml.tex,type-image -->image_tdc</SPAN></A></TT>  
comprising a table that matches colors to a vector of strings, allowing
the encoding of a bitmap (or color array) using a smaller method.
<!-- POPUP DEFINITION -->
<layer id="l__10_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","10_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>type</B><CODE> </CODE>image_tdc<CODE> </CODE><CODE>=</CODE><CODE> </CODE>{<CODE> </CODE>tdc<CODE> </CODE><CODE>:</CODE><CODE> </CODE>Graphics.color<CODE> </CODE>array;<CODE> </CODE>image<CODE> </CODE><CODE>:</CODE><CODE> </CODE>string;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>largeur<CODE> </CODE><CODE>:</CODE><CODE> </CODE>int;<CODE> </CODE>hauteur<CODE> </CODE><CODE>:</CODE><CODE> </CODE>int};;<BR><CODE>type image_tdc =</CODE><BR><CODE>  { tdc: Graphics.color array;</CODE><BR><CODE>    image: string;</CODE><BR><CODE>    largeur: int;</CODE><BR><CODE>    hauteur: int }</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("10_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Write the function <TT><A id="a198__11_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('11_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 11,APPEND/Bibliothequescor.ml.tex,conversion -->to_image_tdc</SPAN></A></TT>  
to convert a <I>color array array</I> to this type.
<!-- POPUP DEFINITION -->
<layer id="l__11_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","11_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>to_image_tdc<CODE> </CODE>caa<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>t<CODE> </CODE><CODE>=</CODE><CODE> </CODE>construire_table<CODE> </CODE><TT>(</TT>analyse_couleurs<CODE> </CODE>caa<TT>)</TT><CODE> </CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>s<CODE> </CODE><CODE>=</CODE><CODE> </CODE>encode<CODE> </CODE>caa<CODE> </CODE>t<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>{<CODE> </CODE>tdc<CODE> </CODE><CODE>=</CODE><CODE> </CODE>t;<CODE> </CODE>image<CODE> </CODE><CODE>=</CODE><CODE> </CODE>s;<CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>largeur<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.length<CODE> </CODE>caa<CODE>.</CODE><TT>(</TT><CODE>0</CODE><TT>)</TT>;<CODE> </CODE>hauteur<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.length<CODE> </CODE>caa}<CODE> </CODE>;;<BR><CODE>val to_image_tdc : Graphics.color array array -&gt; image_tdc = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("11_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Write the function <TT><A id="a199__12_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('12_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 12,APPEND/Bibliothequescor.ml.tex,save -->save_image_tdc</SPAN></A></TT>  
to save the values to a file.
<!-- POPUP DEFINITION -->
<layer id="l__12_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","12_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>sauve_image_tdc<CODE> </CODE>im<CODE> </CODE>nom<CODE> </CODE><CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>oc<CODE> </CODE><CODE>=</CODE><CODE> </CODE>open_out<CODE> </CODE>nom<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>Marshal.to_channel<CODE> </CODE>oc<CODE> </CODE>im<CODE> </CODE>[]<CODE> </CODE>;;<BR><CODE>val sauve_image_tdc : 'a -&gt; string -&gt; unit = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("12_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> <A id="a200__13_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('13_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 13,APPEND/Bibliothequescor.ml.tex,compare -->Compare</SPAN></A>  
the size of the file obtained with the saved version of an
equivalent palette.
<!-- POPUP DEFINITION -->
<layer id="l__13_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","13_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 Elle est plus petite, d'un facteur 4!!!
</span><script language="JavaScript"><!--
  closePopUp("13_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Write the function <TT><A id="a201__14_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('14_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 14,APPEND/Bibliothequescor.ml.tex,decode -->from_image_tdc</SPAN></A></TT>  
to do the reverse conversion.
<!-- POPUP DEFINITION -->
<layer id="l__14_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","14_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>from_image_tdc<CODE> </CODE>im<CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>r<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Array.create_matrix<CODE> </CODE>im<CODE>.</CODE>hauteur<CODE> </CODE>im<CODE>.</CODE>largeur<CODE> </CODE>Graphics.black<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>ns<CODE> </CODE><CODE>=</CODE><CODE> </CODE>ref<CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>i<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE>im<CODE>.</CODE>hauteur<CODE> </CODE><CODE>-</CODE><CODE>1</CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>for</B><CODE> </CODE>j<CODE> </CODE><CODE>=</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE><B>to</B><CODE> </CODE>im<CODE>.</CODE>largeur<CODE> </CODE><CODE>-</CODE><CODE>1</CODE><CODE> </CODE><B>do</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>r<CODE>.</CODE><TT>(</TT>i<TT>)</TT><CODE>.</CODE><TT>(</TT>j<TT>)</TT><CODE> </CODE><CODE>&lt;-</CODE><CODE> </CODE>im<CODE>.</CODE>tdc<CODE>.</CODE><TT>(</TT>int_of_char<CODE> </CODE><CODE> </CODE>im<CODE>.</CODE>image<CODE>.[!</CODE>ns<CODE>]</CODE><TT>)</TT><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE>incr<CODE> </CODE>ns<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>done</B><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>r<CODE> </CODE>;;<BR><CODE>val from_image_tdc : image_tdc -&gt; Graphics.color array array = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("14_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script><BR>
<BR>

<LI> Use it to <A id="a202__15_APPEND/Bibliothequescor.ml.tex" href="javascript: void showMessage('15_APPEND/Bibliothequescor.ml.tex')" class="mousable"><SPAN style=""><!-- 15,APPEND/Bibliothequescor.ml.tex,display -->display</SPAN></A>  
an image saved in a file. The file will be in the form of a value of type
<I>bitmap_tdc</I>.
<!-- POPUP DEFINITION -->
<layer id="l__15_APPEND/Bibliothequescor.ml.tex" class="hint" style="visibility:hidden; position:absolute" visibility="hide"  width="50%">
<script language="JavaScript"><!--
  openPopUp("50%","15_APPEND/Bibliothequescor.ml.tex","");
// --></script><span style="">
 

<PRE><BR># <B>let</B><CODE> </CODE>visu<CODE> </CODE>name<CODE> </CODE><CODE> </CODE><CODE>=</CODE><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>ic<CODE> </CODE><CODE>=</CODE><CODE> </CODE>open_in<CODE> </CODE>name<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>im<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Marshal.from_channel<CODE> </CODE>ic<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>caa<CODE> </CODE><CODE>=</CODE><CODE> </CODE>from_image_tdc<CODE> </CODE>im<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>b<CODE> </CODE><CODE>=</CODE><CODE> </CODE>Graphics.make_image<CODE> </CODE>caa<CODE> </CODE><B>in</B><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><B>let</B><CODE> </CODE>size<CODE> </CODE><CODE>=</CODE><CODE> </CODE><TT>(</TT>string_of_int<CODE> </CODE><TT>(</TT>Array.length<CODE> </CODE>caa<CODE>.</CODE><TT>(</TT><CODE>0</CODE><TT>)</TT><TT>)</TT><TT>)</TT><CODE> </CODE><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE><CODE>"x"</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE><TT>(</TT>string_of_int<CODE> </CODE><TT>(</TT>Array.length<CODE> </CODE>caa<TT>)</TT><TT>)</TT><CODE> </CODE><B>in</B><BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>Graphics.open_graph<CODE> </CODE><TT>(</TT><CODE>" "</CODE><CODE> </CODE><CODE>^</CODE><CODE> </CODE>size<TT>)</TT><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>Graphics.draw_image<CODE> </CODE>b<CODE> </CODE><CODE>0</CODE><CODE> </CODE><CODE>0</CODE><CODE> </CODE>;<BR><CODE> </CODE><CODE> </CODE><CODE> </CODE>b<CODE> </CODE>;;<BR><CODE>val visu : string -&gt; Graphics.image = &lt;fun&gt;</CODE><BR>

</PRE>

</span><script language="JavaScript"><!--
  closePopUp("15_APPEND/Bibliothequescor.ml.tex");
// --></script></layer><!-- END OF POPUP -->
<script language="JavaScript"><!--
  initializePreviousHints();
// --></script></OL><HR>
<A HREF="book-ora077.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora079.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
</BODY>
</HTML>
